home *** CD-ROM | disk | FTP | other *** search
Modula Definition | 1990-05-06 | 3.4 KB | 96 lines |
- DEFINITION MODULE Binary;
-
- (*
- * Die Funktionen in diesem Modul dürfen nur auf Disk-Dateien angewandt
- * werden, die mit 'readOnly', 'writeOnly' oder 'readWrite' eröffnet wurden.
- *)
-
- FROM Files IMPORT File;
-
- FROM SYSTEM IMPORT BYTE, WORD, LONGWORD, ADDRESS;
-
-
- TYPE SeekMode = ( fromBegin, fromPos, fromEnd );
-
-
- (* Lese-Funktionen
- * ---------------
- * Wird versucht, über das augenblickliche Ende hinaus Daten zu lesen,
- * wird die Funktion nicht ausgeführt (der Dateizeiger bleibt unverändert)
- * und stattdessen der Fehler 'End of file' gesetzt.
- * Nur die Funktion 'ReadBytes' weicht davon ab (s.u.).
- *)
-
- PROCEDURE ReadByte (f: File; VAR byte: BYTE);
-
- PROCEDURE ReadWord (f: File; VAR word: WORD);
-
- PROCEDURE ReadLong (f: File; VAR long: LONGWORD);
-
- PROCEDURE ReadBlock (f: File; VAR block: ARRAY OF BYTE);
- PROCEDURE ReadLargeBlock (f: File; VAR block: LONGARRAY OF BYTE);
- (* Wie 'ReadBlock', aber auch für Daten > 64 KB *)
-
- PROCEDURE ReadBytes ( f : File;
- addr : ADDRESS; (* Adresse, an die geladen wird *)
- bytes : LONGCARD;
- VAR bytesRead: LONGCARD);
- (*
- * Diese Funktion liest höchstens 'bytes' Bytes. Wird vorher das Ende der
- * Datei erreicht, werden entsprechend nur die vorhandenen Daten gelesen
- * und dann die Funktion ohne Fehler beendet.
- * 'bytesRead' enthält hinterher die Anzahl der gelesenen Bytes. Der Wert
- * dieser Variablen liegt im Bereich [0..'bytes']. Es kann also auch vor-
- * kommen, daß überhaupt kein Byte gelesen wird !
- * Tritt ein Fehler beim Lesen auf, bleibt der Dateizeiger unverändert.
- *)
-
-
- (* Schreib-Funktionen
- * ------------------
- * Als allgemeine Speicher-Funktionen können in der Regel verwendet werden:
- * - 'WriteBlock' für beliebige Daten (ganze Variablen)
- * - 'WriteBytes' für Daten, von denen man die Adresse hat (z.B. mit ALLOCATE
- * reserviert) oder bei denen man die genaue Länge selbst bestimmen möchte.
- * - WriteByte/Word/Long sind alternativ zu WriteBlck verwendbar, wenn die
- * Datengröße des Parameters mit der Variablen übereinstimmt.
- *)
-
- PROCEDURE WriteByte (f: File; byte: BYTE);
- PROCEDURE WriteWord (f: File; word: WORD);
- PROCEDURE WriteLong (f: File; long: LONGWORD);
-
- PROCEDURE WriteBlock (f: File; REF block: ARRAY OF BYTE);
-
- PROCEDURE WriteLargeBlock (f: File; REF block: LONGARRAY OF BYTE);
- (* Wie 'WriteBlock', auch für Daten > 64 KB *)
-
- PROCEDURE WriteBytes (f: File; addr: ADDRESS; bytes: LONGCARD);
- (* Speichert die Daten ab Adresse 'addr' mit der Länge 'bytes' in Byte *)
-
-
- PROCEDURE FileSize (f: File): LONGCARD;
- (*
- * Liefert aktuelle Dateilänge in Bytes.
- *)
-
- PROCEDURE FilePos (f: File): LONGCARD;
- (*
- * Liefert aktuelle Byteposition des Dateizeigers.
- *)
-
- PROCEDURE Seek (f: File; offset : LONGINT; base: SeekMode);
- (*
- * Positioniert den Dateizeiger relativ...
- * - zum Anfang der Datei, wenn 'base' = 'fromBegin' (offset nur positiv !),
- * - zum Dateizeiger, wenn 'base' = 'fromPos' (offset pos. o. neg.),
- * - zum Ende der Datei, wenn 'base' = 'fromEnd' (offset nur negativ !),
- *
- * Falls die neue Position hinter dem aktuellem Dateiende liegt, wird
- * die Datei entsprechend automatisch erweitert, sofern die Datei zum
- * Beschreiben eröffnet wurde. Die hinzugefügten Daten sind übrigens
- * undefiniert, also keine Null-Bytes!
- *)
-
- END Binary.
-